{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "      <th>interest_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>3000</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>750.000000</td>\n",
       "      <td>-1.5</td>\n",
       "      <td>4.5</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>5465</td>\n",
       "      <td>2732.5</td>\n",
       "      <td>1821.666667</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.0</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3275</td>\n",
       "      <td>1637.5</td>\n",
       "      <td>1637.500000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>18</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>3350</td>\n",
       "      <td>1675.0</td>\n",
       "      <td>670.000000</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>28</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 228 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.5         3   3000           1200.0      750.000000       -1.5   \n",
       "1        1.0         2   5465           2732.5     1821.666667       -1.0   \n",
       "2        1.0         1   2850           1425.0     1425.000000        0.0   \n",
       "3        1.0         1   3275           1637.5     1637.500000        0.0   \n",
       "4        1.0         4   3350           1675.0      670.000000       -3.0   \n",
       "\n",
       "   room_num  Year  Month  Day       ...        walk  walls  war  washer  \\\n",
       "0       4.5  2016      6   24       ...           0      0    0       0   \n",
       "1       3.0  2016      6   12       ...           0      0    0       0   \n",
       "2       2.0  2016      4   17       ...           0      0    0       0   \n",
       "3       2.0  2016      4   18       ...           0      0    0       0   \n",
       "4       5.0  2016      4   28       ...           0      0    1       0   \n",
       "\n",
       "   water  wheelchair  wifi  windows  work  interest_level  \n",
       "0      0           0     0        0     0               1  \n",
       "1      0           0     0        0     0               2  \n",
       "2      0           0     0        0     0               0  \n",
       "3      0           0     0        0     0               2  \n",
       "4      0           0     0        0     0               2  \n",
       "\n",
       "[5 rows x 228 columns]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dpath = './data/'\n",
    "train = pd.read_csv(dpath +\"RentListingInquries_FE_train.csv\")\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "y_train=train[\"interest_level\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 49352 entries, 0 to 49351\n",
      "Columns: 228 entries, bathrooms to interest_level\n",
      "dtypes: float64(9), int64(219)\n",
      "memory usage: 85.8 MB\n"
     ]
    }
   ],
   "source": [
    "train.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>virtual</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>3000</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>750.000000</td>\n",
       "      <td>-1.5</td>\n",
       "      <td>4.5</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>5465</td>\n",
       "      <td>2732.5</td>\n",
       "      <td>1821.666667</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.0</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3275</td>\n",
       "      <td>1637.5</td>\n",
       "      <td>1637.500000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>18</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>3350</td>\n",
       "      <td>1675.0</td>\n",
       "      <td>670.000000</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>28</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 227 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.5         3   3000           1200.0      750.000000       -1.5   \n",
       "1        1.0         2   5465           2732.5     1821.666667       -1.0   \n",
       "2        1.0         1   2850           1425.0     1425.000000        0.0   \n",
       "3        1.0         1   3275           1637.5     1637.500000        0.0   \n",
       "4        1.0         4   3350           1675.0      670.000000       -3.0   \n",
       "\n",
       "   room_num  Year  Month  Day  ...   virtual  walk  walls  war  washer  water  \\\n",
       "0       4.5  2016      6   24  ...         0     0      0    0       0      0   \n",
       "1       3.0  2016      6   12  ...         0     0      0    0       0      0   \n",
       "2       2.0  2016      4   17  ...         0     0      0    0       0      0   \n",
       "3       2.0  2016      4   18  ...         0     0      0    0       0      0   \n",
       "4       5.0  2016      4   28  ...         0     0      0    1       0      0   \n",
       "\n",
       "   wheelchair  wifi  windows  work  \n",
       "0           0     0        0     0  \n",
       "1           0     0        0     0  \n",
       "2           0     0        0     0  \n",
       "3           0     0        0     0  \n",
       "4           0     0        0     0  \n",
       "\n",
       "[5 rows x 227 columns]"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_train=train.drop(\"interest_level\",axis=1)\n",
    "x_train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 2, 0, ..., 2, 2, 2], dtype=int64)"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_train=np.array(x_train)\n",
    "y_train=np.array(y_train)\n",
    "y_train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#直接调用xgboost内嵌的交叉验证（cv），可对连续的n_estimators参数进行快速交叉验证\n",
    "#而GridSearchCV只能对有限个参数进行交叉验证\n",
    "def modelfit(alg, X_train, y_train, cv_folds=None, early_stopping_rounds=10):\n",
    "    xgb_param = alg.get_xgb_params()\n",
    "    xgb_param['num_class'] = 3\n",
    "    \n",
    "    #直接调用xgboost，而非sklarn的wrapper类\n",
    "    xgtrain = xgb.DMatrix(X_train, label = y_train)\n",
    "        \n",
    "    cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], folds =cv_folds,\n",
    "             metrics='mlogloss', early_stopping_rounds=early_stopping_rounds)\n",
    "  \n",
    "    cvresult.to_csv('1_nestimators.csv', index_label = 'n_estimators')\n",
    "    \n",
    "    #最佳参数n_estimators\n",
    "    n_estimators = cvresult.shape[0]\n",
    "    \n",
    "    # 采用交叉验证得到的最佳参数n_estimators，训练模型\n",
    "    alg.set_params(n_estimators = n_estimators)\n",
    "    alg.fit(X_train, y_train, eval_metric='mlogloss')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#params = {\"objective\": \"multi:softprob\", \"eval_metric\":\"mlogloss\", \"num_class\": 9}\n",
    "xgb1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=1000,  #数值大没关系，cv会自动返回合适的n_estimators\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel=0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "modelfit(xgb1, x_train, y_train, cv_folds = kfold)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1e60e3eaf60>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('1_nestimators.csv')\n",
    "        \n",
    "# plot\n",
    "test_means = cvresult['test-mlogloss-mean']\n",
    "test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "train_means = cvresult['train-mlogloss-mean']\n",
    "train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "x_axis = range(0, cvresult.shape[0])\n",
    "        \n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'n_estimators4_1.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1e60f0eff98>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('1_nestimators.csv')\n",
    "\n",
    "cvresult = cvresult.iloc[50:]\n",
    "# plot\n",
    "test_means = cvresult['test-mlogloss-mean']\n",
    "test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "train_means = cvresult['train-mlogloss-mean']\n",
    "train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "x_axis = range(50,cvresult.shape[0]+50)\n",
    "        \n",
    "fig = pyplot.figure(figsize=(5, 5), dpi=100)\n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'n_estimators_detail.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "调整树的参数：max_depth & min_child_weight"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'max_depth': range(3, 10, 2), 'min_child_weight': range(1, 6, 2)}"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "max_depth = range(3,10,2)\n",
    "min_child_weight = range(1,6,2)\n",
    "param_test2_1 = dict(max_depth=max_depth, min_child_weight=min_child_weight)\n",
    "param_test2_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>n_estimators</th>\n",
       "      <th>test-mlogloss-mean</th>\n",
       "      <th>test-mlogloss-std</th>\n",
       "      <th>train-mlogloss-mean</th>\n",
       "      <th>train-mlogloss-std</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>1.039976</td>\n",
       "      <td>0.000231</td>\n",
       "      <td>1.039239</td>\n",
       "      <td>0.000377</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>0.990323</td>\n",
       "      <td>0.000217</td>\n",
       "      <td>0.989090</td>\n",
       "      <td>0.000395</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>0.947896</td>\n",
       "      <td>0.000637</td>\n",
       "      <td>0.946200</td>\n",
       "      <td>0.000252</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>0.911813</td>\n",
       "      <td>0.000609</td>\n",
       "      <td>0.909667</td>\n",
       "      <td>0.000124</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>0.880946</td>\n",
       "      <td>0.000992</td>\n",
       "      <td>0.878194</td>\n",
       "      <td>0.000463</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>5</td>\n",
       "      <td>0.853610</td>\n",
       "      <td>0.001001</td>\n",
       "      <td>0.850433</td>\n",
       "      <td>0.000500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>6</td>\n",
       "      <td>0.829860</td>\n",
       "      <td>0.001219</td>\n",
       "      <td>0.826079</td>\n",
       "      <td>0.000517</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>7</td>\n",
       "      <td>0.808824</td>\n",
       "      <td>0.001123</td>\n",
       "      <td>0.804426</td>\n",
       "      <td>0.000191</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>8</td>\n",
       "      <td>0.790475</td>\n",
       "      <td>0.000918</td>\n",
       "      <td>0.785470</td>\n",
       "      <td>0.000416</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>9</td>\n",
       "      <td>0.774209</td>\n",
       "      <td>0.000996</td>\n",
       "      <td>0.768680</td>\n",
       "      <td>0.000441</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>10</td>\n",
       "      <td>0.759671</td>\n",
       "      <td>0.001017</td>\n",
       "      <td>0.753572</td>\n",
       "      <td>0.000646</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>11</td>\n",
       "      <td>0.746792</td>\n",
       "      <td>0.001187</td>\n",
       "      <td>0.740123</td>\n",
       "      <td>0.000728</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>12</td>\n",
       "      <td>0.735339</td>\n",
       "      <td>0.000987</td>\n",
       "      <td>0.728260</td>\n",
       "      <td>0.000784</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>13</td>\n",
       "      <td>0.724982</td>\n",
       "      <td>0.001070</td>\n",
       "      <td>0.717514</td>\n",
       "      <td>0.000792</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>14</td>\n",
       "      <td>0.715801</td>\n",
       "      <td>0.001066</td>\n",
       "      <td>0.707864</td>\n",
       "      <td>0.000904</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>15</td>\n",
       "      <td>0.707553</td>\n",
       "      <td>0.001199</td>\n",
       "      <td>0.699175</td>\n",
       "      <td>0.001030</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>16</td>\n",
       "      <td>0.700479</td>\n",
       "      <td>0.001254</td>\n",
       "      <td>0.691404</td>\n",
       "      <td>0.001033</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>17</td>\n",
       "      <td>0.694008</td>\n",
       "      <td>0.001351</td>\n",
       "      <td>0.684411</td>\n",
       "      <td>0.001312</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>18</td>\n",
       "      <td>0.688099</td>\n",
       "      <td>0.001512</td>\n",
       "      <td>0.677868</td>\n",
       "      <td>0.001212</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>19</td>\n",
       "      <td>0.682698</td>\n",
       "      <td>0.001620</td>\n",
       "      <td>0.671888</td>\n",
       "      <td>0.001089</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>20</td>\n",
       "      <td>0.677849</td>\n",
       "      <td>0.001617</td>\n",
       "      <td>0.666585</td>\n",
       "      <td>0.001051</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>21</td>\n",
       "      <td>0.673526</td>\n",
       "      <td>0.001748</td>\n",
       "      <td>0.661880</td>\n",
       "      <td>0.000994</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>22</td>\n",
       "      <td>0.669550</td>\n",
       "      <td>0.001527</td>\n",
       "      <td>0.657450</td>\n",
       "      <td>0.001151</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>23</td>\n",
       "      <td>0.666015</td>\n",
       "      <td>0.001465</td>\n",
       "      <td>0.653523</td>\n",
       "      <td>0.001272</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>24</td>\n",
       "      <td>0.662327</td>\n",
       "      <td>0.001484</td>\n",
       "      <td>0.649358</td>\n",
       "      <td>0.001411</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>25</td>\n",
       "      <td>0.659210</td>\n",
       "      <td>0.001538</td>\n",
       "      <td>0.645822</td>\n",
       "      <td>0.001411</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>26</td>\n",
       "      <td>0.656408</td>\n",
       "      <td>0.001688</td>\n",
       "      <td>0.642288</td>\n",
       "      <td>0.001159</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>27</td>\n",
       "      <td>0.653915</td>\n",
       "      <td>0.001887</td>\n",
       "      <td>0.639116</td>\n",
       "      <td>0.001101</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>28</td>\n",
       "      <td>0.651397</td>\n",
       "      <td>0.002002</td>\n",
       "      <td>0.636151</td>\n",
       "      <td>0.000917</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>29</td>\n",
       "      <td>0.649014</td>\n",
       "      <td>0.002129</td>\n",
       "      <td>0.633279</td>\n",
       "      <td>0.000957</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>190</th>\n",
       "      <td>190</td>\n",
       "      <td>0.593385</td>\n",
       "      <td>0.002921</td>\n",
       "      <td>0.514043</td>\n",
       "      <td>0.000909</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>191</th>\n",
       "      <td>191</td>\n",
       "      <td>0.593402</td>\n",
       "      <td>0.002975</td>\n",
       "      <td>0.513681</td>\n",
       "      <td>0.000866</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>192</th>\n",
       "      <td>192</td>\n",
       "      <td>0.593409</td>\n",
       "      <td>0.002868</td>\n",
       "      <td>0.513260</td>\n",
       "      <td>0.000924</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>193</th>\n",
       "      <td>193</td>\n",
       "      <td>0.593401</td>\n",
       "      <td>0.002847</td>\n",
       "      <td>0.512898</td>\n",
       "      <td>0.000869</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>194</th>\n",
       "      <td>194</td>\n",
       "      <td>0.593344</td>\n",
       "      <td>0.002827</td>\n",
       "      <td>0.512509</td>\n",
       "      <td>0.000808</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>195</th>\n",
       "      <td>195</td>\n",
       "      <td>0.593228</td>\n",
       "      <td>0.002866</td>\n",
       "      <td>0.512111</td>\n",
       "      <td>0.000780</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>196</th>\n",
       "      <td>196</td>\n",
       "      <td>0.593211</td>\n",
       "      <td>0.002918</td>\n",
       "      <td>0.511791</td>\n",
       "      <td>0.000779</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>197</th>\n",
       "      <td>197</td>\n",
       "      <td>0.593139</td>\n",
       "      <td>0.002976</td>\n",
       "      <td>0.511403</td>\n",
       "      <td>0.000718</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>198</th>\n",
       "      <td>198</td>\n",
       "      <td>0.593167</td>\n",
       "      <td>0.002953</td>\n",
       "      <td>0.511019</td>\n",
       "      <td>0.000670</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>199</th>\n",
       "      <td>199</td>\n",
       "      <td>0.593155</td>\n",
       "      <td>0.002957</td>\n",
       "      <td>0.510733</td>\n",
       "      <td>0.000636</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>200</th>\n",
       "      <td>200</td>\n",
       "      <td>0.593181</td>\n",
       "      <td>0.002977</td>\n",
       "      <td>0.510414</td>\n",
       "      <td>0.000622</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>201</th>\n",
       "      <td>201</td>\n",
       "      <td>0.593244</td>\n",
       "      <td>0.002977</td>\n",
       "      <td>0.510128</td>\n",
       "      <td>0.000647</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>202</th>\n",
       "      <td>202</td>\n",
       "      <td>0.593196</td>\n",
       "      <td>0.003009</td>\n",
       "      <td>0.509775</td>\n",
       "      <td>0.000653</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>203</th>\n",
       "      <td>203</td>\n",
       "      <td>0.593173</td>\n",
       "      <td>0.003051</td>\n",
       "      <td>0.509402</td>\n",
       "      <td>0.000659</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>204</th>\n",
       "      <td>204</td>\n",
       "      <td>0.593128</td>\n",
       "      <td>0.002996</td>\n",
       "      <td>0.509001</td>\n",
       "      <td>0.000630</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>205</th>\n",
       "      <td>205</td>\n",
       "      <td>0.593098</td>\n",
       "      <td>0.002915</td>\n",
       "      <td>0.508657</td>\n",
       "      <td>0.000706</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>206</th>\n",
       "      <td>206</td>\n",
       "      <td>0.593023</td>\n",
       "      <td>0.002876</td>\n",
       "      <td>0.508296</td>\n",
       "      <td>0.000704</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>207</th>\n",
       "      <td>207</td>\n",
       "      <td>0.592963</td>\n",
       "      <td>0.002850</td>\n",
       "      <td>0.507961</td>\n",
       "      <td>0.000738</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>208</th>\n",
       "      <td>208</td>\n",
       "      <td>0.592929</td>\n",
       "      <td>0.002793</td>\n",
       "      <td>0.507615</td>\n",
       "      <td>0.000800</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>209</th>\n",
       "      <td>209</td>\n",
       "      <td>0.592912</td>\n",
       "      <td>0.002787</td>\n",
       "      <td>0.507226</td>\n",
       "      <td>0.000713</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>210</th>\n",
       "      <td>210</td>\n",
       "      <td>0.592833</td>\n",
       "      <td>0.002735</td>\n",
       "      <td>0.506814</td>\n",
       "      <td>0.000668</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>211</th>\n",
       "      <td>211</td>\n",
       "      <td>0.592794</td>\n",
       "      <td>0.002709</td>\n",
       "      <td>0.506429</td>\n",
       "      <td>0.000635</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>212</th>\n",
       "      <td>212</td>\n",
       "      <td>0.592768</td>\n",
       "      <td>0.002703</td>\n",
       "      <td>0.506083</td>\n",
       "      <td>0.000645</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>213</th>\n",
       "      <td>213</td>\n",
       "      <td>0.592624</td>\n",
       "      <td>0.002728</td>\n",
       "      <td>0.505598</td>\n",
       "      <td>0.000636</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>214</th>\n",
       "      <td>214</td>\n",
       "      <td>0.592513</td>\n",
       "      <td>0.002694</td>\n",
       "      <td>0.505239</td>\n",
       "      <td>0.000784</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>215</th>\n",
       "      <td>215</td>\n",
       "      <td>0.592500</td>\n",
       "      <td>0.002685</td>\n",
       "      <td>0.504892</td>\n",
       "      <td>0.000828</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>216</th>\n",
       "      <td>216</td>\n",
       "      <td>0.592451</td>\n",
       "      <td>0.002713</td>\n",
       "      <td>0.504508</td>\n",
       "      <td>0.000822</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>217</th>\n",
       "      <td>217</td>\n",
       "      <td>0.592454</td>\n",
       "      <td>0.002708</td>\n",
       "      <td>0.504236</td>\n",
       "      <td>0.000831</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>218</th>\n",
       "      <td>218</td>\n",
       "      <td>0.592442</td>\n",
       "      <td>0.002607</td>\n",
       "      <td>0.503869</td>\n",
       "      <td>0.000827</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>219</th>\n",
       "      <td>219</td>\n",
       "      <td>0.592392</td>\n",
       "      <td>0.002543</td>\n",
       "      <td>0.503461</td>\n",
       "      <td>0.000912</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>220 rows × 5 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     n_estimators  test-mlogloss-mean  test-mlogloss-std  train-mlogloss-mean  \\\n",
       "0               0            1.039976           0.000231             1.039239   \n",
       "1               1            0.990323           0.000217             0.989090   \n",
       "2               2            0.947896           0.000637             0.946200   \n",
       "3               3            0.911813           0.000609             0.909667   \n",
       "4               4            0.880946           0.000992             0.878194   \n",
       "5               5            0.853610           0.001001             0.850433   \n",
       "6               6            0.829860           0.001219             0.826079   \n",
       "7               7            0.808824           0.001123             0.804426   \n",
       "8               8            0.790475           0.000918             0.785470   \n",
       "9               9            0.774209           0.000996             0.768680   \n",
       "10             10            0.759671           0.001017             0.753572   \n",
       "11             11            0.746792           0.001187             0.740123   \n",
       "12             12            0.735339           0.000987             0.728260   \n",
       "13             13            0.724982           0.001070             0.717514   \n",
       "14             14            0.715801           0.001066             0.707864   \n",
       "15             15            0.707553           0.001199             0.699175   \n",
       "16             16            0.700479           0.001254             0.691404   \n",
       "17             17            0.694008           0.001351             0.684411   \n",
       "18             18            0.688099           0.001512             0.677868   \n",
       "19             19            0.682698           0.001620             0.671888   \n",
       "20             20            0.677849           0.001617             0.666585   \n",
       "21             21            0.673526           0.001748             0.661880   \n",
       "22             22            0.669550           0.001527             0.657450   \n",
       "23             23            0.666015           0.001465             0.653523   \n",
       "24             24            0.662327           0.001484             0.649358   \n",
       "25             25            0.659210           0.001538             0.645822   \n",
       "26             26            0.656408           0.001688             0.642288   \n",
       "27             27            0.653915           0.001887             0.639116   \n",
       "28             28            0.651397           0.002002             0.636151   \n",
       "29             29            0.649014           0.002129             0.633279   \n",
       "..            ...                 ...                ...                  ...   \n",
       "190           190            0.593385           0.002921             0.514043   \n",
       "191           191            0.593402           0.002975             0.513681   \n",
       "192           192            0.593409           0.002868             0.513260   \n",
       "193           193            0.593401           0.002847             0.512898   \n",
       "194           194            0.593344           0.002827             0.512509   \n",
       "195           195            0.593228           0.002866             0.512111   \n",
       "196           196            0.593211           0.002918             0.511791   \n",
       "197           197            0.593139           0.002976             0.511403   \n",
       "198           198            0.593167           0.002953             0.511019   \n",
       "199           199            0.593155           0.002957             0.510733   \n",
       "200           200            0.593181           0.002977             0.510414   \n",
       "201           201            0.593244           0.002977             0.510128   \n",
       "202           202            0.593196           0.003009             0.509775   \n",
       "203           203            0.593173           0.003051             0.509402   \n",
       "204           204            0.593128           0.002996             0.509001   \n",
       "205           205            0.593098           0.002915             0.508657   \n",
       "206           206            0.593023           0.002876             0.508296   \n",
       "207           207            0.592963           0.002850             0.507961   \n",
       "208           208            0.592929           0.002793             0.507615   \n",
       "209           209            0.592912           0.002787             0.507226   \n",
       "210           210            0.592833           0.002735             0.506814   \n",
       "211           211            0.592794           0.002709             0.506429   \n",
       "212           212            0.592768           0.002703             0.506083   \n",
       "213           213            0.592624           0.002728             0.505598   \n",
       "214           214            0.592513           0.002694             0.505239   \n",
       "215           215            0.592500           0.002685             0.504892   \n",
       "216           216            0.592451           0.002713             0.504508   \n",
       "217           217            0.592454           0.002708             0.504236   \n",
       "218           218            0.592442           0.002607             0.503869   \n",
       "219           219            0.592392           0.002543             0.503461   \n",
       "\n",
       "     train-mlogloss-std  \n",
       "0              0.000377  \n",
       "1              0.000395  \n",
       "2              0.000252  \n",
       "3              0.000124  \n",
       "4              0.000463  \n",
       "5              0.000500  \n",
       "6              0.000517  \n",
       "7              0.000191  \n",
       "8              0.000416  \n",
       "9              0.000441  \n",
       "10             0.000646  \n",
       "11             0.000728  \n",
       "12             0.000784  \n",
       "13             0.000792  \n",
       "14             0.000904  \n",
       "15             0.001030  \n",
       "16             0.001033  \n",
       "17             0.001312  \n",
       "18             0.001212  \n",
       "19             0.001089  \n",
       "20             0.001051  \n",
       "21             0.000994  \n",
       "22             0.001151  \n",
       "23             0.001272  \n",
       "24             0.001411  \n",
       "25             0.001411  \n",
       "26             0.001159  \n",
       "27             0.001101  \n",
       "28             0.000917  \n",
       "29             0.000957  \n",
       "..                  ...  \n",
       "190            0.000909  \n",
       "191            0.000866  \n",
       "192            0.000924  \n",
       "193            0.000869  \n",
       "194            0.000808  \n",
       "195            0.000780  \n",
       "196            0.000779  \n",
       "197            0.000718  \n",
       "198            0.000670  \n",
       "199            0.000636  \n",
       "200            0.000622  \n",
       "201            0.000647  \n",
       "202            0.000653  \n",
       "203            0.000659  \n",
       "204            0.000630  \n",
       "205            0.000706  \n",
       "206            0.000704  \n",
       "207            0.000738  \n",
       "208            0.000800  \n",
       "209            0.000713  \n",
       "210            0.000668  \n",
       "211            0.000635  \n",
       "212            0.000645  \n",
       "213            0.000636  \n",
       "214            0.000784  \n",
       "215            0.000828  \n",
       "216            0.000822  \n",
       "217            0.000831  \n",
       "218            0.000827  \n",
       "219            0.000912  \n",
       "\n",
       "[220 rows x 5 columns]"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "n_estimators=pd.read_csv('1_nestimators.csv')\n",
    "n_estimators"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.60221, std: 0.00318, params: {'max_depth': 3, 'min_child_weight': 1},\n",
       "  mean: -0.60259, std: 0.00328, params: {'max_depth': 3, 'min_child_weight': 3},\n",
       "  mean: -0.60249, std: 0.00324, params: {'max_depth': 3, 'min_child_weight': 5},\n",
       "  mean: -0.58874, std: 0.00413, params: {'max_depth': 5, 'min_child_weight': 1},\n",
       "  mean: -0.58963, std: 0.00368, params: {'max_depth': 5, 'min_child_weight': 3},\n",
       "  mean: -0.58945, std: 0.00342, params: {'max_depth': 5, 'min_child_weight': 5},\n",
       "  mean: -0.58914, std: 0.00317, params: {'max_depth': 7, 'min_child_weight': 1},\n",
       "  mean: -0.58937, std: 0.00370, params: {'max_depth': 7, 'min_child_weight': 3},\n",
       "  mean: -0.58880, std: 0.00357, params: {'max_depth': 7, 'min_child_weight': 5},\n",
       "  mean: -0.60226, std: 0.00388, params: {'max_depth': 9, 'min_child_weight': 1},\n",
       "  mean: -0.59922, std: 0.00566, params: {'max_depth': 9, 'min_child_weight': 3},\n",
       "  mean: -0.59578, std: 0.00374, params: {'max_depth': 9, 'min_child_weight': 5}],\n",
       " {'max_depth': 5, 'min_child_weight': 1},\n",
       " -0.58873519032844845)"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb2_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=220,  #第一轮参数调整得到的n_estimators最优值\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "\n",
    "gsearch2_1 = GridSearchCV(xgb2_1, param_grid = param_test2_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch2_1.fit(x_train , y_train)\n",
    "\n",
    "gsearch2_1.grid_scores_, gsearch2_1.best_params_,     gsearch2_1.best_score_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "再次调整"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'max_depth': [4, 5, 6], 'min_child_weight': [0, 1, 2]}"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "max_depth = [4,5,6]\n",
    "min_child_weight = [0,1,2]\n",
    "param_test2_2 = dict(max_depth=max_depth, min_child_weight=min_child_weight)\n",
    "param_test2_2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.59342, std: 0.00316, params: {'max_depth': 4, 'min_child_weight': 0},\n",
       "  mean: -0.59333, std: 0.00314, params: {'max_depth': 4, 'min_child_weight': 1},\n",
       "  mean: -0.59334, std: 0.00353, params: {'max_depth': 4, 'min_child_weight': 2},\n",
       "  mean: -0.58935, std: 0.00337, params: {'max_depth': 5, 'min_child_weight': 0},\n",
       "  mean: -0.58874, std: 0.00413, params: {'max_depth': 5, 'min_child_weight': 1},\n",
       "  mean: -0.58980, std: 0.00291, params: {'max_depth': 5, 'min_child_weight': 2},\n",
       "  mean: -0.58942, std: 0.00417, params: {'max_depth': 6, 'min_child_weight': 0},\n",
       "  mean: -0.58927, std: 0.00345, params: {'max_depth': 6, 'min_child_weight': 1},\n",
       "  mean: -0.58919, std: 0.00385, params: {'max_depth': 6, 'min_child_weight': 2}],\n",
       " {'max_depth': 5, 'min_child_weight': 1},\n",
       " -0.58873519032844845)"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch2_2 = GridSearchCV(xgb2_1, param_grid = param_test2_2, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch2_2.fit(x_train , y_train)\n",
    "\n",
    "gsearch2_2.grid_scores_, gsearch2_2.best_params_,     gsearch2_2.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "def modelfit(alg, X_train, y_train, useTrainCV=True, cv_folds=None, early_stopping_rounds=100):\n",
    "    \n",
    "    if useTrainCV:\n",
    "        xgb_param = alg.get_xgb_params()\n",
    "        xgb_param['num_class'] = 3\n",
    "        \n",
    "        xgtrain = xgb.DMatrix(X_train, label = y_train)\n",
    "        \n",
    "        cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], folds =cv_folds,\n",
    "                         metrics='mlogloss', early_stopping_rounds=early_stopping_rounds)\n",
    "        \n",
    "        n_estimators = cvresult.shape[0]\n",
    "        alg.set_params(n_estimators = n_estimators)\n",
    "        \n",
    "        cvresult\n",
    "        #result = pd.DataFrame(cvresult)   #cv缺省返回结果为DataFrame\n",
    "        #result.to_csv('my_preds.csv', index_label = 'n_estimators')\n",
    "        cvresult.to_csv('my_preds4_2_3_699.csv', index_label = 'n_estimators')\n",
    "        \n",
    "        # plot\n",
    "        test_means = cvresult['test-mlogloss-mean']\n",
    "        test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "        train_means = cvresult['train-mlogloss-mean']\n",
    "        train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "        x_axis = range(0, n_estimators)\n",
    "        pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "        pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "        pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "        pyplot.xlabel( 'n_estimators' )\n",
    "        pyplot.ylabel( 'Log Loss' )\n",
    "        pyplot.savefig( 'n_estimators4_2_3_699.png' )\n",
    "    \n",
    "    #Fit the algorithm on the data\n",
    "    alg.fit(X_train, y_train, eval_metric='mlogloss')\n",
    "        \n",
    "    #Predict training set:\n",
    "    train_predprob = alg.predict_proba(X_train)\n",
    "    logloss = log_loss(y_train, train_predprob)\n",
    "\n",
    "        \n",
    "    #Print model report:\n",
    "    print (\"logloss of train :\" )\n",
    "    print(logloss)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "logloss of train :\n",
      "0.522084570193\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1d2f7e7ac50>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#调整max_depth和min_child_weight之后再次调整n_estimators(6,4)\n",
    "xgb2_3 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=220,  #数值大没关系，cv会自动返回合适的n_estimators\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel=0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "modelfit(xgb2_3, x_train, y_train, cv_folds = kfold)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "n_estimators=pd.read_csv('my_preds4_2_3_699.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "220"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "n_estimators.shape[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'colsample_bytree': [0.6, 0.7, 0.8, 0.9],\n",
       " 'subsample': [0.3, 0.4, 0.5, 0.6, 0.7, 0.8]}"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "subsample = [i/10.0 for i in range(3,9)]\n",
    "colsample_bytree = [i/10.0 for i in range(6,10)]\n",
    "param_test3_1 = dict(subsample=subsample, colsample_bytree=colsample_bytree)\n",
    "param_test3_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.59017, std: 0.00373, params: {'colsample_bytree': 0.6, 'subsample': 0.3},\n",
       "  mean: -0.58785, std: 0.00399, params: {'colsample_bytree': 0.6, 'subsample': 0.4},\n",
       "  mean: -0.58639, std: 0.00301, params: {'colsample_bytree': 0.6, 'subsample': 0.5},\n",
       "  mean: -0.58574, std: 0.00326, params: {'colsample_bytree': 0.6, 'subsample': 0.6},\n",
       "  mean: -0.58558, std: 0.00323, params: {'colsample_bytree': 0.6, 'subsample': 0.7},\n",
       "  mean: -0.58481, std: 0.00278, params: {'colsample_bytree': 0.6, 'subsample': 0.8},\n",
       "  mean: -0.58911, std: 0.00396, params: {'colsample_bytree': 0.7, 'subsample': 0.3},\n",
       "  mean: -0.58772, std: 0.00400, params: {'colsample_bytree': 0.7, 'subsample': 0.4},\n",
       "  mean: -0.58590, std: 0.00399, params: {'colsample_bytree': 0.7, 'subsample': 0.5},\n",
       "  mean: -0.58557, std: 0.00404, params: {'colsample_bytree': 0.7, 'subsample': 0.6},\n",
       "  mean: -0.58492, std: 0.00388, params: {'colsample_bytree': 0.7, 'subsample': 0.7},\n",
       "  mean: -0.58473, std: 0.00406, params: {'colsample_bytree': 0.7, 'subsample': 0.8},\n",
       "  mean: -0.58874, std: 0.00413, params: {'colsample_bytree': 0.8, 'subsample': 0.3},\n",
       "  mean: -0.58771, std: 0.00465, params: {'colsample_bytree': 0.8, 'subsample': 0.4},\n",
       "  mean: -0.58699, std: 0.00408, params: {'colsample_bytree': 0.8, 'subsample': 0.5},\n",
       "  mean: -0.58574, std: 0.00365, params: {'colsample_bytree': 0.8, 'subsample': 0.6},\n",
       "  mean: -0.58515, std: 0.00361, params: {'colsample_bytree': 0.8, 'subsample': 0.7},\n",
       "  mean: -0.58443, std: 0.00338, params: {'colsample_bytree': 0.8, 'subsample': 0.8},\n",
       "  mean: -0.58787, std: 0.00444, params: {'colsample_bytree': 0.9, 'subsample': 0.3},\n",
       "  mean: -0.58723, std: 0.00390, params: {'colsample_bytree': 0.9, 'subsample': 0.4},\n",
       "  mean: -0.58552, std: 0.00344, params: {'colsample_bytree': 0.9, 'subsample': 0.5},\n",
       "  mean: -0.58487, std: 0.00399, params: {'colsample_bytree': 0.9, 'subsample': 0.6},\n",
       "  mean: -0.58401, std: 0.00377, params: {'colsample_bytree': 0.9, 'subsample': 0.7},\n",
       "  mean: -0.58395, std: 0.00387, params: {'colsample_bytree': 0.9, 'subsample': 0.8}],\n",
       " {'colsample_bytree': 0.9, 'subsample': 0.8},\n",
       " -0.5839484573688255)"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb2_3 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=220,  #数值大没关系，cv会自动返回合适的n_estimators\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel=0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "gsearch3_1 = GridSearchCV(xgb2_3, param_grid = param_test3_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch3_1.fit(x_train , y_train)\n",
    "\n",
    "gsearch3_1.grid_scores_, gsearch3_1.best_params_,     gsearch3_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([ 460.75513844,  497.28104033,  488.40781107,  445.72491388,\n",
       "         440.69767737,  448.75138717,  357.84856853,  336.63495426,\n",
       "         326.93151922,  337.54672976,  345.47277246,  344.5430357 ,\n",
       "         310.50569487,  321.83553624,  341.41049519,  348.15330753,\n",
       "         345.36350265,  356.24175501,  320.58762012,  351.78405585,\n",
       "         377.16464124,  391.0762064 ,  375.88829803,  343.2690979 ]),\n",
       " 'mean_score_time': array([ 1.23986793,  1.15051904,  1.00879803,  1.10725203,  1.13354874,\n",
       "         1.04926047,  0.83661823,  0.74057016,  0.73114514,  0.74077101,\n",
       "         0.7829834 ,  0.75169978,  0.72723475,  0.70828438,  0.70076427,\n",
       "         0.70166683,  0.73716135,  0.72994189,  0.70998869,  0.78067679,\n",
       "         0.68622556,  0.84755459,  0.68261619,  0.508114  ]),\n",
       " 'mean_test_score': array([-0.59017335, -0.58785269, -0.58639471, -0.58574306, -0.58557778,\n",
       "        -0.58481374, -0.58911289, -0.58772162, -0.58590311, -0.58556903,\n",
       "        -0.58491781, -0.58473211, -0.58873519, -0.587713  , -0.58699044,\n",
       "        -0.58573562, -0.58515137, -0.58443075, -0.58786985, -0.58723289,\n",
       "        -0.58552188, -0.58486754, -0.58400989, -0.58394846]),\n",
       " 'mean_train_score': array([-0.51825851, -0.51567359, -0.51384387, -0.51239835, -0.51197293,\n",
       "        -0.5129417 , -0.51512133, -0.51212323, -0.51084724, -0.51034872,\n",
       "        -0.51065597, -0.5104531 , -0.51307099, -0.5102266 , -0.5082856 ,\n",
       "        -0.50767982, -0.50767758, -0.50827717, -0.51093507, -0.50810369,\n",
       "        -0.50672965, -0.5053544 , -0.50558491, -0.50670689]),\n",
       " 'param_colsample_bytree': masked_array(data = [0.6 0.6 0.6 0.6 0.6 0.6 0.7 0.7 0.7 0.7 0.7 0.7 0.8 0.8 0.8 0.8 0.8 0.8\n",
       "  0.9 0.9 0.9 0.9 0.9 0.9],\n",
       "              mask = [False False False False False False False False False False False False\n",
       "  False False False False False False False False False False False False],\n",
       "        fill_value = ?),\n",
       " 'param_subsample': masked_array(data = [0.3 0.4 0.5 0.6 0.7 0.8 0.3 0.4 0.5 0.6 0.7 0.8 0.3 0.4 0.5 0.6 0.7 0.8\n",
       "  0.3 0.4 0.5 0.6 0.7 0.8],\n",
       "              mask = [False False False False False False False False False False False False\n",
       "  False False False False False False False False False False False False],\n",
       "        fill_value = ?),\n",
       " 'params': [{'colsample_bytree': 0.6, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.8}],\n",
       " 'rank_test_score': array([24, 20, 15, 13, 11,  5, 23, 19, 14, 10,  7,  4, 22, 18, 16, 12,  8,\n",
       "         3, 21, 17,  9,  6,  2,  1]),\n",
       " 'split0_test_score': array([-0.58469526, -0.5815511 , -0.58181001, -0.58024945, -0.57958251,\n",
       "        -0.58023132, -0.5827472 , -0.58101943, -0.5794163 , -0.57868789,\n",
       "        -0.57841479, -0.57749098, -0.58158764, -0.57986277, -0.58016678,\n",
       "        -0.57976367, -0.57984348, -0.57847108, -0.58011984, -0.58063165,\n",
       "        -0.57956219, -0.57820065, -0.5784665 , -0.57835136]),\n",
       " 'split0_train_score': array([-0.5191654 , -0.51695441, -0.51520803, -0.51373057, -0.51256747,\n",
       "        -0.51447228, -0.51541327, -0.51439326, -0.51192627, -0.5111604 ,\n",
       "        -0.51137001, -0.5109272 , -0.51426812, -0.51183369, -0.50928814,\n",
       "        -0.50965563, -0.50966474, -0.50940293, -0.51241965, -0.50904722,\n",
       "        -0.50767597, -0.50501112, -0.50582602, -0.50711948]),\n",
       " 'split1_test_score': array([-0.58832108, -0.58594686, -0.58423274, -0.58465847, -0.5849575 ,\n",
       "        -0.58337041, -0.58676593, -0.58554795, -0.58503542, -0.58431796,\n",
       "        -0.58319194, -0.58371092, -0.58707311, -0.58624222, -0.58516703,\n",
       "        -0.58394905, -0.58289727, -0.58343086, -0.58614668, -0.5850998 ,\n",
       "        -0.58411964, -0.58426386, -0.58190491, -0.5819581 ]),\n",
       " 'split1_train_score': array([-0.51857616, -0.51574609, -0.51473707, -0.5136107 , -0.51328353,\n",
       "        -0.51204832, -0.51531064, -0.513335  , -0.51217099, -0.50888805,\n",
       "        -0.51007592, -0.51005514, -0.51331312, -0.51079548, -0.50778725,\n",
       "        -0.50663521, -0.50786374, -0.50882839, -0.51178482, -0.50830804,\n",
       "        -0.50918379, -0.50779739, -0.50430633, -0.5074323 ]),\n",
       " 'split2_test_score': array([-0.58952721, -0.58763443, -0.58692513, -0.58584604, -0.58693448,\n",
       "        -0.58535287, -0.59020495, -0.58928972, -0.58492567, -0.58605109,\n",
       "        -0.58547137, -0.58547908, -0.58981377, -0.58807921, -0.58783809,\n",
       "        -0.58612274, -0.58476403, -0.58512151, -0.58907764, -0.58895728,\n",
       "        -0.58646126, -0.58392431, -0.58331168, -0.58280824]),\n",
       " 'split2_train_score': array([-0.51813275, -0.51461903, -0.51255687, -0.51139906, -0.51122024,\n",
       "        -0.51351696, -0.51574824, -0.51241822, -0.51066306, -0.51067145,\n",
       "        -0.51041248, -0.51100673, -0.51313176, -0.50957606, -0.50821362,\n",
       "        -0.50758546, -0.50728393, -0.50741259, -0.50973107, -0.50811375,\n",
       "        -0.50504799, -0.50568666, -0.50566285, -0.50593813]),\n",
       " 'split3_test_score': array([-0.59273859, -0.59267113, -0.58940101, -0.58957253, -0.58841416,\n",
       "        -0.58783917, -0.59191611, -0.590566  , -0.58930816, -0.58810238,\n",
       "        -0.58837576, -0.58818745, -0.59225852, -0.59076397, -0.58987946,\n",
       "        -0.58891074, -0.58920704, -0.5871077 , -0.59221692, -0.59119519,\n",
       "        -0.58866636, -0.58939038, -0.58877544, -0.58811548]),\n",
       " 'split3_train_score': array([-0.51743123, -0.51650815, -0.51309865, -0.51103237, -0.51223645,\n",
       "        -0.51358224, -0.51537559, -0.51095223, -0.50996224, -0.51077962,\n",
       "        -0.51058421, -0.51046524, -0.51365396, -0.50999184, -0.50837871,\n",
       "        -0.50798864, -0.50754699, -0.50783906, -0.51068698, -0.50711396,\n",
       "        -0.50550805, -0.50409017, -0.50681299, -0.50643093]),\n",
       " 'split4_test_score': array([-0.59558623, -0.59146101, -0.58960564, -0.58838962, -0.58800101,\n",
       "        -0.58727566, -0.59393174, -0.59218634, -0.59083149, -0.59068738,\n",
       "        -0.58913647, -0.58879334, -0.59294419, -0.59361865, -0.59190232,\n",
       "        -0.58993319, -0.5890462 , -0.58802367, -0.59178937, -0.59028146,\n",
       "        -0.58880094, -0.58855965, -0.58759198, -0.58851049]),\n",
       " 'split4_train_score': array([-0.51798703, -0.51454026, -0.51361875, -0.51221907, -0.51055696,\n",
       "        -0.51108871, -0.5137589 , -0.50951741, -0.50951361, -0.51024405,\n",
       "        -0.51083721, -0.50981118, -0.51098801, -0.50893591, -0.5077603 ,\n",
       "        -0.50653414, -0.5060285 , -0.50790289, -0.51005282, -0.50793549,\n",
       "        -0.50623248, -0.50418666, -0.50531638, -0.50661361]),\n",
       " 'std_fit_time': array([  2.31229126,  22.8623961 ,   8.6672302 ,  20.82106102,\n",
       "          5.53655782,   2.9936298 ,  47.31855087,   3.1345801 ,\n",
       "          0.50948744,   5.79302056,   5.97998324,   6.35234799,\n",
       "         11.10782151,   1.2868681 ,   0.90693829,   0.73187352,\n",
       "          3.27564904,   6.91936576,   3.33262394,   1.49961349,\n",
       "          4.39336688,   0.85842106,  10.27177597,  17.95799239]),\n",
       " 'std_score_time': array([ 0.02073163,  0.12938151,  0.05161957,  0.06117988,  0.09503379,\n",
       "         0.02656253,  0.15274664,  0.00653964,  0.00755429,  0.03054406,\n",
       "         0.03012906,  0.03088096,  0.02434148,  0.00566656,  0.00486494,\n",
       "         0.00592827,  0.04270563,  0.03056748,  0.01019358,  0.10394658,\n",
       "         0.02588819,  0.23361662,  0.01917807,  0.0843111 ]),\n",
       " 'std_test_score': array([ 0.00373451,  0.00399069,  0.00301073,  0.0032569 ,  0.0032276 ,\n",
       "         0.00277803,  0.00395727,  0.00400315,  0.00399168,  0.00404376,\n",
       "         0.00388144,  0.00406122,  0.00412657,  0.00464983,  0.00407619,\n",
       "         0.00365255,  0.00360617,  0.00337844,  0.00444413,  0.00390116,\n",
       "         0.00343531,  0.00399475,  0.00377332,  0.00386688]),\n",
       " 'std_train_score': array([ 0.00058262,  0.00097353,  0.00099208,  0.00110826,  0.00097079,\n",
       "         0.00120959,  0.00069785,  0.00172453,  0.00104998,  0.00078653,\n",
       "         0.00043442,  0.00046944,  0.00111122,  0.00100504,  0.00055556,\n",
       "         0.00113242,  0.0011726 ,  0.00072811,  0.00102133,  0.00062289,\n",
       "         0.00151564,  0.00135339,  0.00080985,  0.00052389])}"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch3_1.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.583948 using {'colsample_bytree': 0.9, 'subsample': 0.8}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1d2f42c38d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "print(\"Best: %f using %s\" % (gsearch3_1.best_score_, gsearch3_1.best_params_))\n",
    "test_means = gsearch3_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch3_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch3_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch3_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch3_1.cv_results_).to_csv('my_preds_subsampleh_colsample_bytree_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(colsample_bytree), len(subsample))\n",
    "train_scores = np.array(train_means).reshape(len(colsample_bytree), len(subsample))\n",
    "\n",
    "for i, value in enumerate(colsample_bytree):\n",
    "    pyplot.plot(subsample, -test_scores[i], label= 'test_colsample_bytree:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'subsample' )                                                                                                      \n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'subsample_vs_colsample_bytree1.png' )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'reg_alpha': [1.5, 2], 'reg_lambda': [0.5, 1, 2]}"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "reg_alpha = [ 1.5, 2]    #default = 0, 测试0.1,1，1.5，2\n",
    "reg_lambda = [0.5, 1, 2]      #default = 1，测试0.1， 0.5， 1，2\n",
    "\n",
    "param_test5_1 = dict(reg_alpha=reg_alpha, reg_lambda=reg_lambda)\n",
    "param_test5_1\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.58355, std: 0.00378, params: {'reg_alpha': 1.5, 'reg_lambda': 0.5},\n",
       "  mean: -0.58338, std: 0.00374, params: {'reg_alpha': 1.5, 'reg_lambda': 1},\n",
       "  mean: -0.58345, std: 0.00367, params: {'reg_alpha': 1.5, 'reg_lambda': 2},\n",
       "  mean: -0.58341, std: 0.00361, params: {'reg_alpha': 2, 'reg_lambda': 0.5},\n",
       "  mean: -0.58359, std: 0.00343, params: {'reg_alpha': 2, 'reg_lambda': 1},\n",
       "  mean: -0.58369, std: 0.00371, params: {'reg_alpha': 2, 'reg_lambda': 2}],\n",
       " {'reg_alpha': 1.5, 'reg_lambda': 1},\n",
       " -0.58338012801333172)"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb2_3 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=220,  #数值大没关系，cv会自动返回合适的n_estimators\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.8,\n",
    "        colsample_bytree=0.9,\n",
    "        colsample_bylevel=0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "gsearch5_1 = GridSearchCV(xgb2_3, param_grid = param_test5_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch5_1.fit(x_train , y_train)\n",
    "\n",
    "gsearch5_1.grid_scores_, gsearch5_1.best_params_,     gsearch5_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
